package com.zzy.system.domain;

import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.zzy.common.core.domain.BaseEntity;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 订单实体类，用于表示订单的各种属性信息。
 */
@Data
public class SaleOrderDetail extends BaseEntity {
    //主键 自增
    @TableId(type = IdType.AUTO)
    private Integer SaleOrderDetailId;
    private static final long serialVersionUID = 1L;
    /**
     * 商品id，用于唯一标识每个商品，在整个业务系统中是关联商品相关数据、进行商品操作及数据查询等的核心依据，具有唯一性。
     */
    @JSONField(name = "sku_id")
    private String skuId;


    @JSONField(name = "detail_id")
    private String detailId;
    /**
     * 商品名，直观展示商品的名称信息，方便业务人员在操作中识别和区分不同的商品。
     */
    @JSONField(name = "sku_name")
    private String skuName;

    /**
     * 报价单id，通过该id可以关联对应的报价单信息，用于确定商品在特定报价场景下的价格、规格等相关数据，便于业务逻辑中查询和处理商品的报价情况。
     */
    @JSONField(name = "salemenu_id")
    private String salemenuId;

    /**
     * 一级分类名，按照商品分类体系划分的第一层分类名称，有助于对商品进行大的类别归类和管理，方便从宏观层面统计和分析商品数据。
     */
    @JSONField(name = "category1_name")
    private String category1Name;
    @JSONField(name = "category1_id")
    private String category1Id;

    /**
     * 二级分类名，属于商品分类体系中在一级分类下进一步细分的分类名称，能更细致地对商品进行分类管理，满足不同业务场景下对商品分类查找和分析的需求。
     */
    @JSONField(name = "category2_name")
    private String category2Name;

    @JSONField(name = "category2_id")
    private String category2Id;

    /**
     * spu id，用于唯一标识某个标准产品单元（Standard Product Unit，SPU），SPU是一组可复用、易检索的标准化信息的集合，通过该id可关联SPU相关的通用属性等数据。
     */
    @JSONField(name = "spu_id")
    private String spuId;

    /**
     * 销售规格，以浮点数形式表示商品在销售环节所遵循的特定规格标准，例如可能表示商品的尺寸、容量等规格相关的比例数值，用于业务中明确商品销售时的规格属性。
     */
    @JSONField(name = "sale_ratio")
    private BigDecimal saleRatio;

    /**
     * 基本单位，明确商品计量时所采用的基础单位，如千克、个、升等，是在记录商品数量、库存等业务操作中常用的基本计量单元。
     */
    @JSONField(name = "std_unit_name")
    private String stdUnitName;

    /**
     * 销售单位，指商品在实际销售过程中所使用的计量单元，它可能与基本单位相同，也可能因销售策略等因素而不同，例如以“箱”作为销售单位，而基本单位是“个”。
     */
    @JSONField(name = "sale_unit_name")
    private String saleUnitName;

    /**
     * 基本单位价格，记录商品以基本单位计量时对应的单价数值，用于成本核算、价格对比等业务操作中涉及基本单位价格相关的计算。
     */
    @JSONField(name = "std_sale_price")
    private BigDecimal stdSalePrice;

    /**
     * 销售单位价格，代表商品以销售单位计量时的单价数值，是在销售业务中计算商品总价等操作的重要依据，与销售单位配合使用来确定商品的销售价格情况。
     */
    @JSONField(name = "sale_price")
    private BigDecimal salePrice;

    /**
     * 商品总价，通过商品的销售单位价格与下单数（销售单位）等因素计算得出的该商品的总金额，是订单金额统计、财务核算等业务环节的重要数据指标。
     */
    @JSONField(name = "total_amount")
    private BigDecimal totalAmount;

    /**
     * 下单数（销售单位），记录客户下单购买商品时以销售单位计量的数量，用于明确商品的购买数量情况，是后续业务流程（如库存扣减、物流配送等）的基础数据之一。
     */
    @JSONField(name = "quantity")
    private BigDecimal quantity;

    /**
     * 出库数（销售单位），记录商品实际从仓库出库时以销售单位计量的数量，与信息平台的出库单记录的数值对应，反映了实际发货的商品数量情况，用于库存管理和物流跟踪等业务操作。
     */
    @JSONField(name = "real_quantity")
    private BigDecimal realQuantity;

    /**
     * 记账数（销售单位），由出库数去掉异常数与退货数算得，用于财务记账等业务场景，确保财务记录的商品数量准确反映实际有效的业务流转情况。
     */
    @JSONField(name = "accept_quantity")
    private BigDecimal acceptQuantity;

    /**
     * 是否为记重商品，布尔类型，用于标识商品在业务操作中是否需要依据重量来进行计量、计价等相关处理，例如生鲜类商品通常是记重商品，而文具类一般不是。
     */
    @JSONField(name = "weighing")
    private boolean weighing;

    /**
     * 是否已称重，布尔类型，用于表示商品是否已经完成了称重操作，在涉及记重商品的业务流程中，该属性可帮助跟踪商品称重状态，确保重量数据准确记录。
     */
    @JSONField(name = "has_weighed")
    private boolean hasWeighed;

    /**
     * 是否缺货，布尔类型，用于标识商品当前是否处于缺货状态，当缺货时该商品的出库数为0，商品总价为0，方便业务系统对商品库存缺货情况进行监控和相应处理。
     */
    @JSONField(name = "out_of_stock")
    private boolean outOfStock;

    /**
     * spu备注，用于记录与SPU相关的一些额外说明、特殊情况等信息，方便业务人员查看和了解SPU的相关特殊事项，辅助业务操作和决策。
     */
    @JSONField(name = "spu_remark")
    private String spuRemark;

    //订单id
    private String orderId;

    //是否推送溯源报告 0失败 1 成功
    private Integer isPushTrace;

}